import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public List<List<Integer>> generate(int numRows) {
        //先写一个表示结果的二维数组
        List<List<Integer>> result = new ArrayList<List<Integer>>();

        //先来构造行
        for (int i = 0; i < numRows; i++) {
            List<Integer> rows = new ArrayList<>();//用到了向上转型。需要往这一行里面里面添加元素
            for (int j = 0; j < i+1; j++) {
                if (j==0 || j==i){
                    rows.add(1);
                } else {
                    List<Integer> prevRow = result.get(i - 1);
                    int current = prevRow.get(j - 1) + prevRow.get(j);
                    rows.add(current);
                }
            }
            //一行构造好了之后，把这一行添加到result中
            result.add(rows);
        }
        return result;
    }

    public static void main(String[] args) {
        Main m = new Main();
        Scanner num = new Scanner(System.in);
        int b = num.nextInt();
        List<List<Integer>> result = m.generate(b);
        System.out.println(result);
    }
}
